import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';
import { ElMessage, ElMessageBox } from 'element-plus';
import { Session } from '/@/utils/storage';
import qs from 'qs';




import { useGoogle } from '/@/stores/google';






// 配置新建一个 axios 实例
const service: AxiosInstance = axios.create({
	baseURL: import.meta.env.VITE_API_URL,
	timeout: 50000,
	headers: { 'Content-Type': 'application/json' },
	paramsSerializer: {
		serialize(params) {
			return qs.stringify(params, { allowDots: true });
		},
	},
});

// 添加请求拦截器
service.interceptors.request.use(
	(config) => {
		// 在发送请求之前做些什么 token
		if (Session.get('token')) {
			config.headers!['Authorization'] = `${Session.get('token')}`;
		}
		return config;
	},
	(error) => {
		// 对请求错误做些什么
		return Promise.reject(error);
	}
);

// 添加响应拦截器
service.interceptors.response.use(
	(response) => {
		// 对响应数据做点什么
		const res = response.data;
		const url = response.config.url;
		if (res?.code && res.code !== 0 && res.code == 200) {
			//存在code code不为0 code==200则返回值
			return Promise.resolve(res.data);
		} else {
			if (url == "auth/login" && response.data.status == "COMMON_SUCCESS") {
				// 登录成功
				return Promise.resolve(res.result);
			} else if (url == "user/info/authentication") {
				return Promise.resolve(res);
			} else {
				if (res?.size) {
					return Promise.resolve(res);
				}
				return Promise.reject({
					code: res.code,
					msg: res.message
				});
			}
		}



		// if (res.code && res.code !== 0) {
		// 	// `token` 过期或者账号已在别处登录
		// 	if (res.code === 401 || res.code === 4001) {
		// 		Session.clear(); // 清除浏览器全部临时缓存
		// 		window.location.href = '/'; // 去登录页
		// 		ElMessageBox.alert('你已被登出，请重新登录', '提示', {})
		// 			.then(() => {})
		// 			.catch(() => {});
		// 	}
		// 	return Promise.reject(service.interceptors.response);
		// } else {
		// 	return response.data;
		// }
	},
	(error) => {
		// 对响应错误做点什么
		if (error.message.indexOf('timeout') != -1) {
			ElMessage.error('网络超时');
		} else if (error.message == 'Network Error') {
			ElMessage.error('网络连接错误');
		}

		const url = error.config.url;
		if (url != "auth/login") {
			if (error.response.status == 401 || error.response.status === 403) {
				let msg = error.response.data.message;
				if (msg == "unauthorized.api") {
					return Promise.reject({
						code: 100000,
						msg: "无权限，您无法访问该页面"
					});
				} else if (msg == "unauthorized.data.interface") {
					return Promise.reject({
						code: 100000,
						msg: "无权限，您无法访问该页面"
					});
				} else {
					ElMessageBox.alert('你已被登出，请重新登录', '提示', {
						confirmButtonText: '确认',
						callback: (action: any) => {
							// 身份过期
							Session.clear(); // 清除浏览器全部临时缓存
							window.location.href = import.meta.env.VITE_PUBLIC_PATH ? import.meta.env.VITE_PUBLIC_PATH : '/'; // 去登录页
						}
					});
				}
				// if (!error.response.data) {
				// 	ElMessageBox.alert('你已被登出，请重新登录', '提示', {
				// 		confirmButtonText: '确认',
				// 		callback: (action: any) => {
				// 			// 身份过期
				// 			Session.clear(); // 清除浏览器全部临时缓存
				// 			window.location.href = '/'; // 去登录页
				// 		}
				// 	});
				// }
			} else if (error.response.status == 400) {
				let msg = error.response.data.message;
				// 接口需要输入谷歌验证码
				if (
					(error.response.data &&
						error.response.data.message &&
						error.response.data.message == "system.mfa.refer.your.google.key") ||
					error.response.data.message ==
					"system.mfa.google.verify.notVerifyOrExpire"
				) {
					// 显示谷歌验证弹窗
					useGoogle().setGoogleDiaShow(true);
					return Promise.reject({
						code: 100000,
						msg: error.response.data.data
					});
				} else if (msg == "system.mfa.google.verify.failed") {
					return Promise.reject({
						code: 100000,
						msg: "双因子校验失败，请重新输入！" //
					});
				} else {
					return Promise.reject({
						code: 100000,
						msg: msg || "接口访问失败"
					});
				}
			}
		}
		return Promise.reject(error);
	}
);

// 导出 axios 实例
export default service;
